Repertoire de travail :
setwd("~/Desktop/analyse perfermance joueur ligue 1")
getwd()
library(dplyr)
##
## Attachement du package : 'dplyr'
## Les objets suivants sont masqués depuis 'package:stats':
##
## filter, lag
## Les objets suivants sont masqués depuis 'package:base':
##
## intersect, setdiff, setequal, union
library(tidyr)
library(lubridate)
##
## Attachement du package : 'lubridate'
## Les objets suivants sont masqués depuis 'package:base':
##
## date, intersect, setdiff, union
library(tsoutliers)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(readxl)
library(car)
## Le chargement a nécessité le package : carData
##
## Attachement du package : 'car'
## L'objet suivant est masqué depuis 'package:dplyr':
##
## recode
library(lmtest)
## Le chargement a nécessité le package : zoo
##
## Attachement du package : 'zoo'
## Les objets suivants sont masqués depuis 'package:base':
##
## as.Date, as.Date.numeric
library(ggplot2)
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ tibble 3.1.6 ✓ stringr 1.4.0
## ✓ readr 2.1.1 ✓ forcats 0.5.1
## ✓ purrr 0.3.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x lubridate::as.difftime() masks base::as.difftime()
## x lubridate::date() masks base::date()
## x dplyr::filter() masks stats::filter()
## x lubridate::intersect() masks base::intersect()
## x dplyr::lag() masks stats::lag()
## x car::recode() masks dplyr::recode()
## x lubridate::setdiff() masks base::setdiff()
## x purrr::some() masks car::some()
## x lubridate::union() masks base::union()
library(stargazer)
##
## Please cite as:
## Hlavac, Marek (2018). stargazer: Well-Formatted Regression and Summary Statistics Tables.
## R package version 5.2.2. https://CRAN.R-project.org/package=stargazer
library(FactoMineR)
library(factoextra)
## Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(corrplot)
## corrplot 0.92 loaded
library(correlation)
library(normtest)
library(stringr)
library(patchwork)
library(plm)
##
## Attachement du package : 'plm'
## Les objets suivants sont masqués depuis 'package:dplyr':
##
## between, lag, lead
library(lattice)
library(DataExplorer)
library(VIM)
## Le chargement a nécessité le package : colorspace
## Le chargement a nécessité le package : grid
## VIM is ready to use.
## Suggestions and bug-reports can be submitted at: https://github.com/statistikat/VIM/issues
##
## Attachement du package : 'VIM'
## L'objet suivant est masqué depuis 'package:datasets':
##
## sleep
library(summarytools)
##
## Attachement du package : 'summarytools'
## L'objet suivant est masqué depuis 'package:tibble':
##
## view
library("funModeling")
## Le chargement a nécessité le package : Hmisc
## Le chargement a nécessité le package : survival
## Le chargement a nécessité le package : Formula
##
## Attachement du package : 'Hmisc'
## Les objets suivants sont masqués depuis 'package:summarytools':
##
## label, label<-
## Les objets suivants sont masqués depuis 'package:dplyr':
##
## src, summarize
## Les objets suivants sont masqués depuis 'package:base':
##
## format.pval, units
## funModeling v.1.9.4 :)
## Examples and tutorials at livebook.datascienceheroes.com
## / Now in Spanish: librovivodecienciadedatos.ai
##
## Attachement du package : 'funModeling'
## L'objet suivant est masqué depuis 'package:summarytools':
##
## freq
library(flextable)
##
## Attachement du package : 'flextable'
## L'objet suivant est masqué depuis 'package:purrr':
##
## compose
library(gtsummary)
##
## Attachement du package : 'gtsummary'
## Les objets suivants sont masqués depuis 'package:flextable':
##
## as_flextable, continuous_summary
library(ClustOfVar)
library(rpart)
library(rpart.plot)
library(randomForest)
## randomForest 4.7-1
## Type rfNews() to see new features/changes/bug fixes.
##
## Attachement du package : 'randomForest'
## L'objet suivant est masqué depuis 'package:ggplot2':
##
## margin
## L'objet suivant est masqué depuis 'package:dplyr':
##
## combine
library(lmPerm)
library(fmsb)
library(plot3D)
library(rgl)
library(plotly)
##
## Attachement du package : 'plotly'
## Les objets suivants sont masqués depuis 'package:flextable':
##
## highlight, style
## L'objet suivant est masqué depuis 'package:Hmisc':
##
## subplot
## L'objet suivant est masqué depuis 'package:ggplot2':
##
## last_plot
## L'objet suivant est masqué depuis 'package:stats':
##
## filter
## L'objet suivant est masqué depuis 'package:graphics':
##
## layout
library("ggpubr")
##
## Attachement du package : 'ggpubr'
## Les objets suivants sont masqués depuis 'package:flextable':
##
## border, font, rotate
library(knitr)
‘library(dplyr) library(tidyr) library(lubridate) library(tsoutliers) library(readxl) library(car) library(lmtest) library(ggplot2) library(tidyverse) library(stargazer) library(FactoMineR) library(factoextra) library(corrplot) library(correlation) library(normtest) library(stringr) library(patchwork) library(plm) library(lattice) library(DataExplorer) library(VIM) library(summarytools) library(“funModeling”) library(flextable) library(gtsummary) library(ClustOfVar) library(rpart) library(rpart.plot) library(randomForest) library(lmPerm) library(fmsb) library(plot3D) library(rgl) library(plotly) library(“ggpubr”) library(knitr)’
tirs <- read_excel("perfomance_joueurs.xlsx",
sheet = "tirs")
prepa_tirs_buts <- read_excel("perfomance_joueurs.xlsx",
sheet = "preparation tirs et buts")
## New names:
## * PassJeu -> PassJeu...5
## * PassArr -> PassArr...6
## * Drib -> Drib...7
## * Tirs -> Tirs...8
## * Ftp -> Ftp...9
## * ...
temps_jeu<- read_excel("perfomance_joueurs.xlsx",
sheet = "temps de jeu")
##2-1 Fusion des bases de données
df= merge(temps_jeu,prepa_tirs_buts,by=c("Joueur","Équipe"),all.x = T)
df = merge(df,tirs,by=c("Joueur","Équipe"),all.x = T)
kable(head(df))
| Joueur | Équipe | MJ | Min | Mn/MJ | Min% | Titulaire | Mn/Débuté | Compl | Remp | Mn/Remp | RempNE | PPM | BT | BE | +/- | +/-90 | Sur/En dehors du terrain | AMT | AMT90 | PassJeu…5 | PassArr…6 | Drib…7 | Tirs…8 | Ftp…9 | Déf…10 | AMB | AMB90 | PassJeu…13 | PassArr…14 | Drib…15 | Tirs…16 | Ftp…17 | Déf…18 | Nation | Pos | Âge | Naissance | 90 | Buts | Tirs | TC | TC% | Tir/90 | TC/90 | B/Tir | B/TC | Dist | CF | PénM | PénT |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Abdel Jalil Medioub | Bordeaux | 9 | 537 | 60 | 19.9 | 5 | 88 | 4 | 4 | 24 | 16 | 1.33 | 11 | 15 | -4 | -0.67 | +0.49 | 0 | 0.00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0.00 | 0 | 0 | 0 | 0 | 0 | 0 | dz ALG | DF | 24-223 | 1997 | 6.0 | 0 | 3 | 0 | 0.0 | 0.50 | 0.00 | 0.00 | NA | 22.1 | 0 | 0 | 0 |
| Abdou Diallo | Paris S-G | 12 | 877 | 73 | 32.5 | 10 | 86 | 8 | 2 | 11 | 10 | 2.50 | 23 | 9 | 14 | +1.44 | +0.35 | 5 | 0.51 | 5 | 0 | 0 | 0 | 0 | 0 | 1 | 0.10 | 1 | 0 | 0 | 0 | 0 | 0 | sn SEN | DF | 25-339 | 1996 | 9.7 | 0 | 2 | 1 | 50.0 | 0.21 | 0.10 | 0.00 | 0.00 | 14.0 | 0 | 0 | 0 |
| Abdoulaye Bakayoko | Saint-Étienne | 2 | 180 | 90 | 6.7 | 2 | 90 | 2 | 0 | NA | 1 | 0.00 | 1 | 3 | -2 | -1.00 | -0.21 | 1 | 0.50 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0.00 | 0 | 0 | 0 | 0 | 0 | 0 | fr FRA | DF | 19-114 | 2002 | 2.0 | 0 | 0 | 0 | NA | 0.00 | 0.00 | NA | NA | NA | 0 | 0 | 0 |
| Abdoulaye Bamba | Angers | 2 | 4 | 2 | 0.1 | 0 | NA | 0 | 2 | 2 | 13 | 1.50 | 0 | 0 | 0 | 0.00 | +0.33 | 1 | 22.50 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0.00 | 0 | 0 | 0 | 0 | 0 | 0 | ci CIV | ATDF | 31-348 | 1990 | 0.0 | 0 | 0 | 0 | NA | 0.00 | 0.00 | NA | NA | NA | 0 | 0 | 0 |
| Abdoulaye Sylla | Nantes | 1 | 67 | 67 | 2.5 | 1 | 67 | 0 | 0 | NA | 14 | 0.00 | 1 | 2 | -1 | -1.34 | -1.58 | 0 | 0.00 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0.00 | 0 | 0 | 0 | 0 | 0 | 0 | gn GUI | DF | 21-363 | 2000 | 0.7 | 0 | 0 | 0 | NA | 0.00 | 0.00 | NA | NA | NA | 0 | 0 | 0 |
| Abdu Conté | Troyes | 10 | 823 | 82 | 30.5 | 10 | 82 | 6 | 0 | NA | 0 | 1.20 | 7 | 12 | -5 | -0.55 | -0.12 | 9 | 0.98 | 7 | 0 | 0 | 0 | 1 | 1 | 2 | 0.22 | 2 | 0 | 0 | 0 | 0 | 0 | pt POR | DF | 24-015 | 1998 | 9.1 | 0 | 3 | 1 | 33.3 | 0.33 | 0.11 | 0.00 | 0.00 | 17.9 | 0 | 0 | 0 |
kable(tail(df))
| Joueur | Équipe | MJ | Min | Mn/MJ | Min% | Titulaire | Mn/Débuté | Compl | Remp | Mn/Remp | RempNE | PPM | BT | BE | +/- | +/-90 | Sur/En dehors du terrain | AMT | AMT90 | PassJeu…5 | PassArr…6 | Drib…7 | Tirs…8 | Ftp…9 | Déf…10 | AMB | AMB90 | PassJeu…13 | PassArr…14 | Drib…15 | Tirs…16 | Ftp…17 | Déf…18 | Nation | Pos | Âge | Naissance | 90 | Buts | Tirs | TC | TC% | Tir/90 | TC/90 | B/Tir | B/TC | Dist | CF | PénM | PénT | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 711 | Yunis Abdelhamid | Reims | 27 | 2353 | 87 | 87.1 | 27 | 87 | 26 | 0 | NA | 0 | 1.07 | 27 | 29 | -2 | -0.08 | -0.60 | 15 | 0.57 | 10 | 0 | 2 | 1 | 0 | 2 | 0 | 0.00 | 0 | 0 | 0 | 0 | 0 | 0 | ma MAR | DF | 34-192 | 1987 | 26.1 | 1 | 17 | 5 | 29.4 | 0.65 | 0.19 | 0.06 | 0.20 | 18.4 | 0 | 0 | 0 |
| 712 | Yusuf Yazıcı | Lille | 15 | 509 | 34 | 18.9 | 5 | 71 | 0 | 10 | 16 | 3 | 1.33 | 8 | 13 | -5 | -0.88 | -1.21 | 17 | 3.01 | 6 | 8 | 1 | 1 | 0 | 1 | 1 | 0.18 | 0 | 1 | 0 | 0 | 0 | 0 | tr TUR | MTAT | 25-069 | 1997 | 5.7 | 1 | 10 | 5 | 50.0 | 1.77 | 0.88 | 0.10 | 0.20 | 21.4 | 0 | 0 | 0 |
| 713 | Yvan Neyou | Saint-Étienne | 13 | 893 | 69 | 33.1 | 12 | 71 | 4 | 1 | 37 | 0 | 0.38 | 7 | 23 | -16 | -1.61 | -1.21 | 12 | 1.21 | 10 | 1 | 1 | 0 | 0 | 0 | 0 | 0.00 | 0 | 0 | 0 | 0 | 0 | 0 | cm CMR | MT | 25-095 | 1997 | 9.9 | 0 | 6 | 3 | 50.0 | 0.60 | 0.30 | 0.00 | 0.00 | 28.5 | 1 | 0 | 0 |
| 714 | Yvann Macon | Saint-Étienne | 18 | 1239 | 69 | 45.9 | 15 | 79 | 9 | 3 | 20 | 1 | 0.94 | 11 | 24 | -13 | -0.94 | -0.27 | 22 | 1.60 | 19 | 2 | 1 | 0 | 0 | 0 | 2 | 0.15 | 2 | 0 | 0 | 0 | 0 | 0 | fr FRA | DF | 23-189 | 1998 | 13.8 | 0 | 11 | 3 | 27.3 | 0.80 | 0.22 | 0.00 | 0.00 | 27.2 | 0 | 0 | 0 |
| 715 | Zaydou Youssouf | Saint-Étienne | 24 | 1335 | 56 | 49.4 | 16 | 69 | 2 | 8 | 28 | 4 | 1.00 | 12 | 27 | -15 | -1.01 | -0.42 | 27 | 1.82 | 19 | 0 | 0 | 4 | 2 | 2 | 0 | 0.00 | 0 | 0 | 0 | 0 | 0 | 0 | fr FRA | MT | 22-271 | 1999 | 14.8 | 0 | 18 | 5 | 27.8 | 1.21 | 0.34 | 0.00 | 0.00 | 27.4 | 0 | 0 | 0 |
| 716 | Zeki Çelik | Lille | 24 | 1997 | 83 | 74.0 | 22 | 89 | 21 | 2 | 23 | 3 | 1.50 | 28 | 26 | 2 | +0.09 | -0.04 | 28 | 1.26 | 22 | 2 | 1 | 1 | 2 | 0 | 2 | 0.09 | 1 | 0 | 0 | 0 | 1 | 0 | tr TUR | DF | 25-050 | 1997 | 22.2 | 1 | 17 | 1 | 5.9 | 0.77 | 0.05 | 0.06 | 1.00 | 20.6 | 0 | 0 | 0 |
##2-2 Renomination des variables
df= rename(df,age="Âge",
equipe="Équipe",
minutes_jouees_90="90",
Mn_MJ="Mn/MJ",
pourcentage_TC="TC%",
Tir_90="Tir/90",
TC_90="TC/90",
B_Tir="B/Tir",
Mn_Debute="Mn/Débuté",
buts_marques_net_avec_joueur="+/-",
buts_marques_net_avec_joueur_par_match="+/-90",
Sur_En_dehors_du_terrain="Sur/En dehors du terrain",
PassJeu_tirs="PassJeu...5",
PassArr_tirs="PassArr...6",
Drib_tirs="Drib...7",
tirs="Tirs...8",
Ftp_tirs="Ftp...9",
Mn_Remp="Mn/Remp",
pourcentage_min="Min%",
def_tirs="Déf...10",
passjeu_buts="PassJeu...13",
passarr_buts="PassArr...14",
Drib_buts="Drib...15",
tirs_buts ="Tirs...16",
Ftp_buts="Ftp...17",
Def_buts="Déf...18",
B_TC="B/TC",
PenM="PénM",
PenT="PénT",
Tirs_total_par_match="Tirs",
)
##2-3 Pour obtenir le nom des variables en minuscule
colnames(df)= str_to_lower(colnames(df))
str(df)
## 'data.frame': 716 obs. of 51 variables:
## $ joueur : chr "Abdel Jalil Medioub" "Abdou Diallo" "Abdoulaye Bakayoko" "Abdoulaye Bamba" ...
## $ equipe : chr "Bordeaux" "Paris S-G" "Saint-Étienne" "Angers" ...
## $ mj : num 9 12 2 2 1 10 15 1 24 0 ...
## $ min : num 537 877 180 4 67 ...
## $ mn_mj : num 60 73 90 2 67 82 22 6 78 NA ...
## $ pourcentage_min : chr "19.9" "32.5" "6.7" "0.1" ...
## $ titulaire : num 5 10 2 0 1 10 2 0 21 0 ...
## $ mn_debute : num 88 86 90 NA 67 82 79 NA 87 NA ...
## $ compl : num 4 8 2 0 0 6 1 0 17 0 ...
## $ remp : num 4 2 0 2 0 0 13 1 3 0 ...
## $ mn_remp : num 24 11 NA 2 NA NA 13 6 17 NA ...
## $ rempne : num 16 10 1 13 14 0 13 1 0 18 ...
## $ ppm : chr "1.33" "2.50" "0.00" "1.50" ...
## $ bt : num 11 23 1 0 1 7 8 0 48 NA ...
## $ be : num 15 9 3 0 2 12 5 0 19 NA ...
## $ buts_marques_net_avec_joueur : num -4 14 -2 0 -1 -5 3 0 29 NA ...
## $ buts_marques_net_avec_joueur_par_match: chr "-0.67" "+1.44" "-1.00" "0.00" ...
## $ sur_en_dehors_du_terrain : chr "+0.49" "+0.35" "-0.21" "+0.33" ...
## $ amt : num 0 5 1 1 0 9 8 0 38 NA ...
## $ amt90 : chr "0.00" "0.51" "0.50" "22.50" ...
## $ passjeu_tirs : num 0 5 0 1 0 7 7 0 30 NA ...
## $ passarr_tirs : num 0 0 0 0 0 0 0 0 1 NA ...
## $ drib_tirs : num 0 0 0 0 0 0 1 0 6 NA ...
## $ tirs : num 0 0 0 0 0 0 0 0 1 NA ...
## $ ftp_tirs : num 0 0 1 0 0 1 0 0 0 NA ...
## $ def_tirs : num 0 0 0 0 0 1 0 0 0 NA ...
## $ amb : num 0 1 0 0 0 2 1 0 7 NA ...
## $ amb90 : chr "0.00" "0.10" "0.00" "0.00" ...
## $ passjeu_buts : num 0 1 0 0 0 2 1 0 6 NA ...
## $ passarr_buts : num 0 0 0 0 0 0 0 0 0 NA ...
## $ drib_buts : num 0 0 0 0 0 0 0 0 1 NA ...
## $ tirs_buts : num 0 0 0 0 0 0 0 0 0 NA ...
## $ ftp_buts : num 0 0 0 0 0 0 0 0 0 NA ...
## $ def_buts : num 0 0 0 0 0 0 0 0 0 NA ...
## $ nation : chr "dz ALG" "sn SEN" "fr FRA" "ci CIV" ...
## $ pos : chr "DF" "DF" "DF" "ATDF" ...
## $ age : chr "24-223" "25-339" "19-114" "31-348" ...
## $ naissance : num 1997 1996 2002 1990 2000 ...
## $ minutes_jouees_90 : chr "6.0" "9.7" "2.0" "0.0" ...
## $ buts : num 0 0 0 0 0 0 2 0 3 NA ...
## $ tirs_total_par_match : num 3 2 0 0 0 3 7 0 17 NA ...
## $ tc : num 0 1 0 0 0 1 3 0 7 NA ...
## $ pourcentage_tc : chr "0.0" "50.0" NA NA ...
## $ tir_90 : chr "0.50" "0.21" "0.00" "0.00" ...
## $ tc_90 : chr "0.00" "0.10" "0.00" "0.00" ...
## $ b_tir : chr "0.00" "0.00" NA NA ...
## $ b_tc : chr NA "0.00" NA NA ...
## $ dist : chr "22.1" "14.0" NA NA ...
## $ cf : num 0 0 0 0 0 0 0 0 0 NA ...
## $ penm : num 0 0 0 0 0 0 0 0 0 NA ...
## $ pent : num 0 0 0 0 0 0 0 0 0 NA ...
##2-4 Modification de la variable age dans le bon format
age=rename(data.frame(joueur = df$joueur,equipe=df$equipe,str_split_fixed(df$age, "-", 2)),age_annee=X1,
age_jours=X2)
age = update_columns(age, c("age_annee","age_jours"), as.numeric)
age = mutate(age,age=age_annee+(age_jours/365))
age=select(age,joueur,equipe,age)
colnames(df)
## [1] "joueur"
## [2] "equipe"
## [3] "mj"
## [4] "min"
## [5] "mn_mj"
## [6] "pourcentage_min"
## [7] "titulaire"
## [8] "mn_debute"
## [9] "compl"
## [10] "remp"
## [11] "mn_remp"
## [12] "rempne"
## [13] "ppm"
## [14] "bt"
## [15] "be"
## [16] "buts_marques_net_avec_joueur"
## [17] "buts_marques_net_avec_joueur_par_match"
## [18] "sur_en_dehors_du_terrain"
## [19] "amt"
## [20] "amt90"
## [21] "passjeu_tirs"
## [22] "passarr_tirs"
## [23] "drib_tirs"
## [24] "tirs"
## [25] "ftp_tirs"
## [26] "def_tirs"
## [27] "amb"
## [28] "amb90"
## [29] "passjeu_buts"
## [30] "passarr_buts"
## [31] "drib_buts"
## [32] "tirs_buts"
## [33] "ftp_buts"
## [34] "def_buts"
## [35] "nation"
## [36] "pos"
## [37] "age"
## [38] "naissance"
## [39] "minutes_jouees_90"
## [40] "buts"
## [41] "tirs_total_par_match"
## [42] "tc"
## [43] "pourcentage_tc"
## [44] "tir_90"
## [45] "tc_90"
## [46] "b_tir"
## [47] "b_tc"
## [48] "dist"
## [49] "cf"
## [50] "penm"
## [51] "pent"
df=df[,-37]#df sans l'ancienne variable age situé à la place 35.
df=merge(df,age,by=c('joueur','equipe'),all.x = T)#fusion de la nouvelle variable age dans le bon format
str(df)
## 'data.frame': 716 obs. of 51 variables:
## $ joueur : chr "Abdel Jalil Medioub" "Abdou Diallo" "Abdoulaye Bakayoko" "Abdoulaye Bamba" ...
## $ equipe : chr "Bordeaux" "Paris S-G" "Saint-Étienne" "Angers" ...
## $ mj : num 9 12 2 2 1 10 15 1 24 0 ...
## $ min : num 537 877 180 4 67 ...
## $ mn_mj : num 60 73 90 2 67 82 22 6 78 NA ...
## $ pourcentage_min : chr "19.9" "32.5" "6.7" "0.1" ...
## $ titulaire : num 5 10 2 0 1 10 2 0 21 0 ...
## $ mn_debute : num 88 86 90 NA 67 82 79 NA 87 NA ...
## $ compl : num 4 8 2 0 0 6 1 0 17 0 ...
## $ remp : num 4 2 0 2 0 0 13 1 3 0 ...
## $ mn_remp : num 24 11 NA 2 NA NA 13 6 17 NA ...
## $ rempne : num 16 10 1 13 14 0 13 1 0 18 ...
## $ ppm : chr "1.33" "2.50" "0.00" "1.50" ...
## $ bt : num 11 23 1 0 1 7 8 0 48 NA ...
## $ be : num 15 9 3 0 2 12 5 0 19 NA ...
## $ buts_marques_net_avec_joueur : num -4 14 -2 0 -1 -5 3 0 29 NA ...
## $ buts_marques_net_avec_joueur_par_match: chr "-0.67" "+1.44" "-1.00" "0.00" ...
## $ sur_en_dehors_du_terrain : chr "+0.49" "+0.35" "-0.21" "+0.33" ...
## $ amt : num 0 5 1 1 0 9 8 0 38 NA ...
## $ amt90 : chr "0.00" "0.51" "0.50" "22.50" ...
## $ passjeu_tirs : num 0 5 0 1 0 7 7 0 30 NA ...
## $ passarr_tirs : num 0 0 0 0 0 0 0 0 1 NA ...
## $ drib_tirs : num 0 0 0 0 0 0 1 0 6 NA ...
## $ tirs : num 0 0 0 0 0 0 0 0 1 NA ...
## $ ftp_tirs : num 0 0 1 0 0 1 0 0 0 NA ...
## $ def_tirs : num 0 0 0 0 0 1 0 0 0 NA ...
## $ amb : num 0 1 0 0 0 2 1 0 7 NA ...
## $ amb90 : chr "0.00" "0.10" "0.00" "0.00" ...
## $ passjeu_buts : num 0 1 0 0 0 2 1 0 6 NA ...
## $ passarr_buts : num 0 0 0 0 0 0 0 0 0 NA ...
## $ drib_buts : num 0 0 0 0 0 0 0 0 1 NA ...
## $ tirs_buts : num 0 0 0 0 0 0 0 0 0 NA ...
## $ ftp_buts : num 0 0 0 0 0 0 0 0 0 NA ...
## $ def_buts : num 0 0 0 0 0 0 0 0 0 NA ...
## $ nation : chr "dz ALG" "sn SEN" "fr FRA" "ci CIV" ...
## $ pos : chr "DF" "DF" "DF" "ATDF" ...
## $ naissance : num 1997 1996 2002 1990 2000 ...
## $ minutes_jouees_90 : chr "6.0" "9.7" "2.0" "0.0" ...
## $ buts : num 0 0 0 0 0 0 2 0 3 NA ...
## $ tirs_total_par_match : num 3 2 0 0 0 3 7 0 17 NA ...
## $ tc : num 0 1 0 0 0 1 3 0 7 NA ...
## $ pourcentage_tc : chr "0.0" "50.0" NA NA ...
## $ tir_90 : chr "0.50" "0.21" "0.00" "0.00" ...
## $ tc_90 : chr "0.00" "0.10" "0.00" "0.00" ...
## $ b_tir : chr "0.00" "0.00" NA NA ...
## $ b_tc : chr NA "0.00" NA NA ...
## $ dist : chr "22.1" "14.0" NA NA ...
## $ cf : num 0 0 0 0 0 0 0 0 0 NA ...
## $ penm : num 0 0 0 0 0 0 0 0 0 NA ...
## $ pent : num 0 0 0 0 0 0 0 0 0 NA ...
## $ age : num 24.6 25.9 19.3 32 22 ...
##2-5 Modification des classes dans le format adéquats
df = update_columns(df, c("mj","min","mn_mj","pourcentage_min","titulaire","mn_debute","compl","remp","mn_remp","rempne","ppm",
"bt","be","buts_marques_net_avec_joueur","buts_marques_net_avec_joueur_par_match","sur_en_dehors_du_terrain","amt90","passjeu_tirs","passarr_tirs",
"drib_tirs","tirs","ftp_tirs","def_tirs","amb","amb90","passjeu_buts","passarr_buts","drib_buts",
"tirs_buts","ftp_buts","def_buts","minutes_jouees_90","buts","tirs_total_par_match","tc","pourcentage_tc",
"tir_90","tc_90","b_tir","b_tc","dist","cf","penm","pent","age"
)
, as.numeric)
df = update_columns(df, c("joueur","equipe","nation","pos","naissance")
, as.factor)
str(df)
## 'data.frame': 716 obs. of 51 variables:
## $ joueur : Factor w/ 699 levels "Abdel Jalil Medioub",..: 1 2 3 4 5 6 7 8 9 10 ...
## $ equipe : Factor w/ 20 levels "Angers","Bordeaux",..: 2 15 18 1 13 20 19 4 15 6 ...
## $ mj : num 9 12 2 2 1 10 15 1 24 0 ...
## $ min : num 537 877 180 4 67 ...
## $ mn_mj : num 60 73 90 2 67 82 22 6 78 NA ...
## $ pourcentage_min : num 19.9 32.5 6.7 0.1 2.5 30.5 12.1 0.2 69.6 NA ...
## $ titulaire : num 5 10 2 0 1 10 2 0 21 0 ...
## $ mn_debute : num 88 86 90 NA 67 82 79 NA 87 NA ...
## $ compl : num 4 8 2 0 0 6 1 0 17 0 ...
## $ remp : num 4 2 0 2 0 0 13 1 3 0 ...
## $ mn_remp : num 24 11 NA 2 NA NA 13 6 17 NA ...
## $ rempne : num 16 10 1 13 14 0 13 1 0 18 ...
## $ ppm : num 1.33 2.5 0 1.5 0 1.2 1.27 0 2.29 NA ...
## $ bt : num 11 23 1 0 1 7 8 0 48 NA ...
## $ be : num 15 9 3 0 2 12 5 0 19 NA ...
## $ buts_marques_net_avec_joueur : num -4 14 -2 0 -1 -5 3 0 29 NA ...
## $ buts_marques_net_avec_joueur_par_match: num -0.67 1.44 -1 0 -1.34 -0.55 0.83 0 1.39 NA ...
## $ sur_en_dehors_du_terrain : num 0.49 0.35 -0.21 0.33 -1.58 -0.12 0.22 0.8 0.62 NA ...
## $ amt : num 0 5 1 1 0 9 8 0 38 NA ...
## $ amt90 : num 0 0.51 0.5 22.5 0 0.98 2.2 0 1.82 NA ...
## $ passjeu_tirs : num 0 5 0 1 0 7 7 0 30 NA ...
## $ passarr_tirs : num 0 0 0 0 0 0 0 0 1 NA ...
## $ drib_tirs : num 0 0 0 0 0 0 1 0 6 NA ...
## $ tirs : num 0 0 0 0 0 0 0 0 1 NA ...
## $ ftp_tirs : num 0 0 1 0 0 1 0 0 0 NA ...
## $ def_tirs : num 0 0 0 0 0 1 0 0 0 NA ...
## $ amb : num 0 1 0 0 0 2 1 0 7 NA ...
## $ amb90 : num 0 0.1 0 0 0 0.22 0.28 0 0.34 NA ...
## $ passjeu_buts : num 0 1 0 0 0 2 1 0 6 NA ...
## $ passarr_buts : num 0 0 0 0 0 0 0 0 0 NA ...
## $ drib_buts : num 0 0 0 0 0 0 0 0 1 NA ...
## $ tirs_buts : num 0 0 0 0 0 0 0 0 0 NA ...
## $ ftp_buts : num 0 0 0 0 0 0 0 0 0 NA ...
## $ def_buts : num 0 0 0 0 0 0 0 0 0 NA ...
## $ nation : Factor w/ 67 levels "ar ARG","at AUT",..: 21 56 25 13 30 50 29 25 39 NA ...
## $ pos : Factor w/ 10 levels "AT","ATDF","ATMT",..: 4 4 4 2 4 4 9 1 4 NA ...
## $ naissance : Factor w/ 23 levels "1983","1984",..: 15 14 20 8 18 16 9 14 16 NA ...
## $ minutes_jouees_90 : num 6 9.7 2 0 0.7 9.1 3.6 0.1 20.9 NA ...
## $ buts : num 0 0 0 0 0 0 2 0 3 NA ...
## $ tirs_total_par_match : num 3 2 0 0 0 3 7 0 17 NA ...
## $ tc : num 0 1 0 0 0 1 3 0 7 NA ...
## $ pourcentage_tc : num 0 50 NA NA NA 33.3 42.9 NA 41.2 NA ...
## $ tir_90 : num 0.5 0.21 0 0 0 0.33 1.93 0 0.81 NA ...
## $ tc_90 : num 0 0.1 0 0 0 0.11 0.83 0 0.34 NA ...
## $ b_tir : num 0 0 NA NA NA 0 0.29 NA 0.18 NA ...
## $ b_tc : num NA 0 NA NA NA 0 0.67 NA 0.43 NA ...
## $ dist : num 22.1 14 NA NA NA 17.9 16.7 NA 16.3 NA ...
## $ cf : num 0 0 0 0 0 0 0 0 0 NA ...
## $ penm : num 0 0 0 0 0 0 0 0 0 NA ...
## $ pent : num 0 0 0 0 0 0 0 0 0 NA ...
## $ age : num 24.6 25.9 19.3 32 22 ...
## - attr(*, ".internal.selfref")=<externalptr>
##2-6 Relocalisation des variables
Par souci de lecture, on place les variables de type factor parmis les premières variables.
Aussi, un des objectifs de l’analyse consitera plutard à considérer les buts comme la variable dépendante.Nous la placer ainsi en second de liste. La variable ‘joueur’ est en première position pour faciliter l’identification des individus.
df= relocate(df,c("nation","pos","naissance"),.before = mj)
df= relocate(df,buts,.before = equipe)
colnames(df)
## [1] "joueur"
## [2] "buts"
## [3] "equipe"
## [4] "nation"
## [5] "pos"
## [6] "naissance"
## [7] "mj"
## [8] "min"
## [9] "mn_mj"
## [10] "pourcentage_min"
## [11] "titulaire"
## [12] "mn_debute"
## [13] "compl"
## [14] "remp"
## [15] "mn_remp"
## [16] "rempne"
## [17] "ppm"
## [18] "bt"
## [19] "be"
## [20] "buts_marques_net_avec_joueur"
## [21] "buts_marques_net_avec_joueur_par_match"
## [22] "sur_en_dehors_du_terrain"
## [23] "amt"
## [24] "amt90"
## [25] "passjeu_tirs"
## [26] "passarr_tirs"
## [27] "drib_tirs"
## [28] "tirs"
## [29] "ftp_tirs"
## [30] "def_tirs"
## [31] "amb"
## [32] "amb90"
## [33] "passjeu_buts"
## [34] "passarr_buts"
## [35] "drib_buts"
## [36] "tirs_buts"
## [37] "ftp_buts"
## [38] "def_buts"
## [39] "minutes_jouees_90"
## [40] "tirs_total_par_match"
## [41] "tc"
## [42] "pourcentage_tc"
## [43] "tir_90"
## [44] "tc_90"
## [45] "b_tir"
## [46] "b_tc"
## [47] "dist"
## [48] "cf"
## [49] "penm"
## [50] "pent"
## [51] "age"
L’analyse des données explicatives (EDA) est utilisée pour faire le point sur les données :
Les analyses exploratoires ont lieu immédiatement après le nettoyage des données, et juste avant les analyses descriptives, qui sont plus précises que les analyses exploratoires,et qui vont se concentrer sur certaines variables.Pour cette analyse, nous nous basersons sur les joueurs ayant marqué au moins 1 but dans la saison.
df=filter(df,buts>0)
dim(df)
## [1] 250 51
##3-1 Structure des ces données, dimensions, type de variables
introduce(df)
## rows columns discrete_columns continuous_columns all_missing_columns
## 1 250 51 5 46 0
## total_missing_values complete_rows total_observations memory_usage
## 1 44 206 12750 170688
plot_intro(df)
##3-2 Données manquantes
plot_missing(df)
kable(profile_missing(df))
| feature | num_missing | pct_missing |
|---|---|---|
| joueur | 0 | 0.000 |
| buts | 0 | 0.000 |
| equipe | 0 | 0.000 |
| nation | 0 | 0.000 |
| pos | 0 | 0.000 |
| naissance | 0 | 0.000 |
| mj | 0 | 0.000 |
| min | 0 | 0.000 |
| mn_mj | 0 | 0.000 |
| pourcentage_min | 0 | 0.000 |
| titulaire | 0 | 0.000 |
| mn_debute | 3 | 0.012 |
| compl | 0 | 0.000 |
| remp | 0 | 0.000 |
| mn_remp | 41 | 0.164 |
| rempne | 0 | 0.000 |
| ppm | 0 | 0.000 |
| bt | 0 | 0.000 |
| be | 0 | 0.000 |
| buts_marques_net_avec_joueur | 0 | 0.000 |
| buts_marques_net_avec_joueur_par_match | 0 | 0.000 |
| sur_en_dehors_du_terrain | 0 | 0.000 |
| amt | 0 | 0.000 |
| amt90 | 0 | 0.000 |
| passjeu_tirs | 0 | 0.000 |
| passarr_tirs | 0 | 0.000 |
| drib_tirs | 0 | 0.000 |
| tirs | 0 | 0.000 |
| ftp_tirs | 0 | 0.000 |
| def_tirs | 0 | 0.000 |
| amb | 0 | 0.000 |
| amb90 | 0 | 0.000 |
| passjeu_buts | 0 | 0.000 |
| passarr_buts | 0 | 0.000 |
| drib_buts | 0 | 0.000 |
| tirs_buts | 0 | 0.000 |
| ftp_buts | 0 | 0.000 |
| def_buts | 0 | 0.000 |
| minutes_jouees_90 | 0 | 0.000 |
| tirs_total_par_match | 0 | 0.000 |
| tc | 0 | 0.000 |
| pourcentage_tc | 0 | 0.000 |
| tir_90 | 0 | 0.000 |
| tc_90 | 0 | 0.000 |
| b_tir | 0 | 0.000 |
| b_tc | 0 | 0.000 |
| dist | 0 | 0.000 |
| cf | 0 | 0.000 |
| penm | 0 | 0.000 |
| pent | 0 | 0.000 |
| age | 0 | 0.000 |
plot_bar(select(df,equipe,pos,nation,naissance))
plot_bar(select(df,equipe,pos,nation,naissance),by="pos")
plot_bar(select(df,equipe,pos,nation,naissance),by="equipe")
plot_histogram(split_columns(df)$continuous)
plot_density(split_columns(df)$continuous)
plot_qq(df)
## Warning: Removed 3 rows containing non-finite values (stat_qq).
## Warning: Removed 3 rows containing non-finite values (stat_qq_line).
## Warning: Removed 41 rows containing non-finite values (stat_qq).
## Warning: Removed 41 rows containing non-finite values (stat_qq_line).
plot_qq(df, by ="pos")
## Warning: Removed 3 rows containing non-finite values (stat_qq).
## Warning: Removed 3 rows containing non-finite values (stat_qq_line).
## Warning: Removed 41 rows containing non-finite values (stat_qq).
## Warning: Removed 41 rows containing non-finite values (stat_qq_line).
plot_qq(df, by ="equipe")
## Warning: Removed 3 rows containing non-finite values (stat_qq).
## Warning: Removed 3 rows containing non-finite values (stat_qq_line).
## Warning: Removed 41 rows containing non-finite values (stat_qq).
## Warning: Removed 41 rows containing non-finite values (stat_qq_line).
plot_qq(df, by ="naissance")
## Warning: Removed 3 rows containing non-finite values (stat_qq).
## Warning: Removed 3 rows containing non-finite values (stat_qq_line).
## Warning: Removed 41 rows containing non-finite values (stat_qq).
## Warning: Removed 41 rows containing non-finite values (stat_qq_line).
plot_qq(df, by ="nation")
## Warning: Removed 3 rows containing non-finite values (stat_qq).
## Warning: Removed 3 rows containing non-finite values (stat_qq_line).
## Warning: Removed 41 rows containing non-finite values (stat_qq).
## Warning: Removed 41 rows containing non-finite values (stat_qq_line).